/**
 * 验证手机号
 * @param {String} mobile 手机号
 * @returns {Boolean} 验证结果
 */
export function validateMobile(mobile) {
  return /^1[3-9]\d{9}$/.test(mobile);
}

/**
 * 验证邮箱
 * @param {String} email 邮箱
 * @returns {Boolean} 验证结果
 */
export function validateEmail(email) {
  return /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(email);
}

/**
 * 验证身份证号
 * @param {String} idCard 身份证号
 * @returns {Boolean} 验证结果
 */
export function validateIdCard(idCard) {
  return /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(idCard);
}

/**
 * 验证URL
 * @param {String} url URL地址
 * @returns {Boolean} 验证结果
 */
export function validateUrl(url) {
  return /^(https?:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})([/\w.-]*)*\/?$/.test(url);
}

/**
 * 验证密码强度
 * @param {String} password 密码
 * @returns {Number} 强度等级(0-3)
 */
export function getPasswordStrength(password) {
  if (!password) return 0;

  let strength = 0;

  // 长度大于等于8
  if (password.length >= 8) {
    strength += 1;
  }

  // 包含数字和字母
  if (/[0-9]/.test(password) && /[a-zA-Z]/.test(password)) {
    strength += 1;
  }

  // 包含特殊字符
  if (/[^a-zA-Z0-9]/.test(password)) {
    strength += 1;
  }

  return strength;
}

/**
 * 验证是否为空
 * @param {*} value 需要验证的值
 * @returns {Boolean} 验证结果
 */
export function isEmpty(value) {
  return (
    value === undefined ||
    value === null ||
    (typeof value === "string" && value.trim() === "") ||
    (Array.isArray(value) && value.length === 0) ||
    (typeof value === "object" && Object.keys(value).length === 0)
  );
}

/**
 * 验证是否为数字
 * @param {*} value 需要验证的值
 * @returns {Boolean} 验证结果
 */
export function isNumber(value) {
  return !isNaN(parseFloat(value)) && isFinite(value);
}

/**
 * 验证是否为整数
 * @param {*} value 需要验证的值
 * @returns {Boolean} 验证结果
 */
export function isInteger(value) {
  return Number.isInteger(Number(value));
}

/**
 * 验证是否为正数
 * @param {*} value 需要验证的值
 * @returns {Boolean} 验证结果
 */
export function isPositiveNumber(value) {
  return isNumber(value) && Number(value) > 0;
}
